// ++++++++++++++++++++++++++++++++++++++++
// 《Go 语言+Vue.js 实战派——基于 Gin 框架》源码
// ++++++++++++++++++++++++++++++++++++++++
// 作者公众号：源码大数据
// 自媒体账号（抖音、视频号、快手、B站、知乎）：廖显东-ShirDon
// 仓库地址：https://gitee.com/shirdonl/goGinVue.git
// 仓库地址：https://github.com/shirdonl/goGinVue.git
// // 博客：https://www.shirdon.com
// 购买图书：https: //item.jd.com/14958064.html
// ++++++++++++++++++++++++++++++++++++++++

package main

import (
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
	"time"
)

func main() {
	r := gin.Default()

	// 向引擎添加自定义中间件
	r.Use(myCustomMiddleware())

	// 定义路由
	r.GET("/", func(c *gin.Context) {
		c.String(http.StatusOK, "Hello, world!")
	})

	r.Run(":8080")
}

func myCustomMiddleware() gin.HandlerFunc {
	// 返回实际的中间件函数
	return func(c *gin.Context) {
		// 在调用下一个中间件或处理函数之前做一些事情...
		c.Set("startTime", time.Now())

		// 调用下一个中间件或处理函数
		c.Next()

		// 在调用下一个中间件或处理函数后做一些事情...
		elapsed := time.Since(c.MustGet("startTime").(time.Time))
		log.Printf("Request took %s", elapsed)
	}
}
